package com.boss.thirteen.dao;

import com.boss.framework.dto.PaginationDTO;
import com.boss.thirteen.entity.SalaryThirteenMonth;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

public interface ISalaryThirteenMonthDao {
    /**
     * 分页数据
     *
     * @param paginationDTO 分页条件
     * @return
     */
    List<SalaryThirteenMonth> querySalaryThirteenMonthPage(PaginationDTO paginationDTO,String agencyId,Map<String,Object> params);

    /**
     * 获取分页总数
     * @param agencyId
     * @param params
     * @return
     */
    int querySalaryThirteenMonthCount(String agencyId,Map<String,Object> params);

    /**
     * 按单位查询十三月工资信息
     * @param agencyId
     * @return
     */
    List<Map<String,Object>> selecctSalaryThirteenMonth( String agencyId);

    /**
     * 通过id集合返回十三月初始数据
     * @param ids
     * @return
     */
    List<SalaryThirteenMonth> selecctSalaryThirteenBeginById( List<String> ids);
    /**
     * 获取十三月工资财政审核各单位汇总数据
     * @param paginationDTO
     * @param whereSql
     * @param agencyIds
     * @return
     */
    List<Map<String,Object>> selectVerifySalaryData(PaginationDTO paginationDTO, String whereSql,List<String> agencyIds,Map<String,Object> otherParams);

    /**
     * 获取十三月工资财政审核各单位汇总数据条数
     * @param whereSql
     * @param agencyIds
     * @return
     */
    int selectVerifySalaryDataTotal( String whereSql,List<String> agencyIds,Map<String,Object> otherParams);

    /**
     * 按条件查询十三月工资数据
     *
     * @param params 查询条件
     * @return
     */
    List<SalaryThirteenMonth> selectSalaryThirteenMonth(Map<String,Object> params);
    /**
     * 批量新增十三月工资数据
     * @param list
     */
    void batchInsertSalaryThirteenMonth(List<SalaryThirteenMonth> list) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException;

    /**
     * 批量存储十三月初始数据
     * @param list
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     */
    void batchInsertSalaryThirteenBegin(List<SalaryThirteenMonth> list) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException;
    /**
     * 批量修改十三月工资数据
     * @param list
     */
    void batchUpdateSalaryThirteenMonth(List<SalaryThirteenMonth> list) throws Exception ;

    /**
     * 单条修改十三月工资
     * @param stm
     * @throws Exception
     */
    void updateSalaryThirteenMonth(SalaryThirteenMonth stm) throws Exception;
    /**
     * 删除十三月工资数据
     * @param ids
     */
    void deleteSalaryThirteenMonth(List<String> ids);
    /**
     * 删除十三月工资数据
     * @param agencyId
     */
    void deleteSalaryThirteenMonthByAgency(List<String> agencyId);

    /**
     * 按单位清除月初数据
     * @param agencyId
     */
    void deleteSalaryThirteenBeginByAgency(List<String> agencyId,String year);
    /**
     * 从历史表查询初始化的人员信息
     *
     * @param agencyId 单位id
     * @param salaryMonth 模板月份
     * @return
     */
    List<SalaryThirteenMonth> selectSalaryThirteenMonthFromHistory(List<String> agencyId,String salaryMonth,String meritPayCode,List<String>
            columns,Double percent);

    /**
     * 查询十三月工资单位未添加人员信息
     * @param agencyId
     * @param year
     * @param province
     * @return
     */
    List<SalaryThirteenMonth> selectSalaryThirteenPersonFromHistory(String agencyId, String year,String province);

    /**
     * 导出银行文件用查询生成明细
     * @param mof_div_code
     * @param columnList
     * @return
     */
    List<Map<String, Object>> selectMXOffer(String mof_div_code, List<String> columnList);



    /**
     * 获取十三月工资财政审核各单位汇总数据
     * @param paginationDTO
     * @param whereSql
     * @param agencyIds
     * @return
     */
    List<Map<String,Object>> selectVerifySalaryHisData(PaginationDTO paginationDTO, String whereSql,List<String> agencyIds,Map<String,Object> otherParams);

    /**
     * 获取十三月工资财政审核各单位汇总数据条数
     * @param whereSql
     * @param agencyIds
     * @return
     */
    int selectVerifySalaryHisDataTotal( String whereSql,List<String> agencyIds,Map<String,Object> otherParams);

    /**
     * 批量新增十三月工资数据历史数据
     * @param list
     */
    void batchInsertSalaryThirteenHis(List<SalaryThirteenMonth> list,String year) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException;

    /**
     * 通过id和年份查询十三月已结数据
     * @param agencyId
     * @param year
     * @return
     */
    List<SalaryThirteenMonth> selectSalaryThirteenMonthHis(List<String> agencyId, String year);

    /**
     * 删除历史数据
     * @param agencyIds
     * @param year
     */
    void deleteSalaryThirteenMonthHisByAgencys(List<String> agencyIds,String year);

    /**
     * 获取单位总发放人数和总发放金额
     * @param agencyId
     * @return
     */
    Map<String,Object> queryAgencyTotal(String agencyId);
    /**
     * 获取单位初始总发放人数和总发放金额
     * @param agencyId
     * @return
     */
    Map<String,Object> queryAgencyBeginTotal(String agencyId);
    /**
     * 获取单位增加人数
     * @param agencyId
     * @return
     */
    Integer queryAgencyAddCount(String agencyId);

    /**
     * 获取单位减少人数
     * @param agencyId
     * @return
     */
    Integer queryAgencyDelCount(String agencyId);

    /**
     * 查询十三月单位增加人员信息
     * @param agencyId
     * @return
     */
    List<Map<String,Object>>  queryAgencyAddPersonInfo(String agencyId);

    /**
     * 查询十三月单位减少人员信息
     * @param agencyId
     * @return
     */
    List<Map<String,Object>> queryAgencyDelPersonInfo(String agencyId);

}
